package logica.estructura;

import java.util.Vector;
import resources.Grafo.*;

import java.awt.Color;
import java.math.*;

import excepciones.ContenidoException;
import excepciones.DataStructureException;

import logica.analizador.DocumentoJerarquicoEnlazado;
import logica.common.NodoColor;


public class RedSemantica extends Grafo{
	private static Color[] coloresAceptados = {Color.red, Color.green, Color.blue, Color.yellow, Color.pink, Color.gray, Color.orange, Color.black, Color.magenta};
	private Vector colores;
	
/*	public Vector getProxColor() {
		Color aColor = coloresAceptados.
		for(int i=0; i< coloresAceptados.length; i++)
		{
			
		}
		return colores;
	}

	public void addColor(Color aColor) {
		this.colores.addElement(aColor);
	}
*/
	public RedSemantica()
	{
		super();
		this.colores =  new Vector();
	}
	
	public RedSemantica(DocumentoJerarquicoEnlazado texto) throws DataStructureException, ContenidoException
	{
		super();
		this.colores =  new Vector();
		this.initRedSemantica(this, texto, new NodoColor(""));
	}

	public void initRedSemantica(RedSemantica red, DocumentoJerarquicoEnlazado texto, NodoColor padre) throws DataStructureException, ContenidoException
	{
		NodoColor nodoSeccion;
		Object nodoSeccionEncontrado;
		NodoColor nodoContenido;
		Object nodoContenidoEncontrado;
		
		if (texto.getTitulo().isEmpty())
		{
			nodoSeccion = padre;
			nodoSeccionEncontrado = nodoSeccion;
		}
		else
		{
			nodoSeccion = new NodoColor(texto.getTitulo().trim());

			//Si no existe el nodo.
			nodoSeccionEncontrado = (NodoColor)red.buscarNodo(nodoSeccion);
			if (nodoSeccionEncontrado == null)
			{
				red.agregarNodo(nodoSeccion);
				nodoSeccionEncontrado = nodoSeccion;
			}
			if (!padre.getValor().toString().isEmpty())
			{
				((NodoColor)nodoSeccionEncontrado).setColor(padre.getColor());
			}
			padre = (NodoColor)nodoSeccionEncontrado;
		}
		if (texto.getContenidoSecciones().size() == 0)
		{
			Vector<String> enlaces = texto.getEnlaces();
			for (int i=0; i<enlaces.size(); i++)
			{
				nodoContenido = new NodoColor(enlaces.elementAt(i).trim());	
				
				nodoContenidoEncontrado = (NodoColor)red.buscarNodo(nodoContenido);
				//Si no existe el nodo.
				if (nodoContenidoEncontrado == null)
				{
					red.agregarNodo(nodoContenido);
					nodoContenidoEncontrado = nodoContenido;
				}
				//Ver si agregar 2 veces el mismo enlace.
				red.conectar(nodoSeccionEncontrado, nodoContenidoEncontrado);
				
			}
		}
		else
		{
			Vector<String> secciones = texto.getContenidoSecciones();
			for(int i=0; i<secciones.size(); i++)
			{
				DocumentoJerarquicoEnlazado nuevaSeccion = new DocumentoJerarquicoEnlazado(secciones.get(i));
				red.initRedSemantica(red, nuevaSeccion, padre); 
			}
		}
	}

}
